package io.github.smileinmotion.oplog.model;

import lombok.Data;
import org.aspectj.lang.ProceedingJoinPoint;
import org.springframework.lang.Nullable;

import java.util.Date;

/**
 * @author Mr.spc
 */
@Data
public class OperLog {

    /**
     * 开始时间
     */
    private Date beginDate;

    /**
     * 业务标识
     */
    private String bizId;

    /**
     * des: 模块名称
     */
    private String moduleName;

    /**
     * des: 菜单名称
     */
    private String menuName;

    /**
     * des: 执行操作类型（增删改查）
     */
    private String operaType;

    /**
     * des: 自定义内容
     */
    private String customMsg;

    /**
     * des: 自定义内容
     */
    private String customTag;

    /**
     * 租户
     */
    @Nullable
    private String tenant;

    /**
     * 操作者
     */
    @Nullable
    private String operator;

    /**
     * 类名称
     */
    private String className;

    /**
     * 方法名称
     */
    private String methodName;

    /**
     * 请求来源（内部调用：interior or 外部请求：external（ServletRequestAttributes 不为空时即认为外部请求））
     */
    @Nullable
    private String requestSource;

    /**
     * 请求ip地址
     */
    @Nullable
    private String ipAddress;

    /**
     * 请求路径
     */
    @Nullable
    private String httpUri;

    /**
     * 请求设备类型
     */
    @Nullable
    private String deviceType;

    /**
     * 请求方法类型：GET、POST、PUT、DELETE
     */
    @Nullable
    private String httpMethod;

    /**
     * 请求类型：eg: application/x-www-form-urlencoded;charset=UTF-8
     */
    @Nullable
    private String contentType;


    /**
     * request参数
     */
    @Nullable
    private String requestParam;

    /**
     * 方法参数
     */
    @Nullable
    private Object methodParam;

    /**
     * 是否发生异常: true:是; false:否
     */
    private boolean orNormal;


    /**
     * 返回类型
     */
    @Nullable
    private String executeResulType;
    /**
     * 返回结果
     */
    @Nullable
    private Object executeResult;

    /**
     * 异常堆栈信息
     */
    @Nullable
    private String stack;

    /**
     * 结束时间
     */
    private Date endDate;

    /**
     * joinPoint：方法执行对象（方便扩展）
     */
    private ProceedingJoinPoint joinPoint;

}
